package com.biboheart.breport.support.utils;

import java.math.BigDecimal;
import java.util.regex.Pattern;

public class NumberUtils {
    // 正则表达式模式，用于匹配整数或小数
    private static final Pattern NUMBER_PATTERN = Pattern.compile("^-?\\d+(\\.\\d+)?$");

    /**
     * 获取数字类型
     * @param number 数字
     * @return 数字类型
     */
    public static Class<? extends Number> getNumberClass(Object number) {
        if (number instanceof Integer) {
            return Integer.class;
        } else if (number instanceof Long) {
            return Long.class;
        } else if (number instanceof Float) {
            return Float.class;
        } else if (number instanceof Double) {
            return Double.class;
        } else if (number instanceof String) {
            String str = (String) number;
            if (!isNumeric(str)) {
                return null;
            }
            if (str.contains(".")) {
                return Double.class;
            } else {
                return Long.class;
            }
        } else {
            return null;
        }
    }

    /**
     * 判断字符串是否为数值
     * @param str 待判断的字符串
     * @return 如果是数值返回 true，否则返回 false
     */
    public static boolean isNumeric(String str) {
        if (str == null || str.trim().isEmpty()) {
            return false;
        }
        return NUMBER_PATTERN.matcher(str).matches();
    }

    /**
     * bigDecimal 转 number
     * @param decimal bigDecimal
     * @param clazz number 类型
     * @return number
     */
    public static Number decimalValue(BigDecimal decimal, Class<? extends Number> clazz) {
        if (null == clazz) {
            return decimal.doubleValue();
        } else if (clazz.equals(Integer.class)) {
            return decimal.intValue();
        } else if (clazz.equals(Float.class)) {
            return decimal.floatValue();
        } else if (clazz.equals(Double.class)) {
            return decimal.doubleValue();
        } else {
            return decimal.longValue();
        }
    }
}
